package tugou

// import (
// 	"reflect"
// 	"strings"
// 	"time"
// 	"tugou/logs"
// 	"tugou/web"
// 	"tugou/websocket"
// )

// func VerifyPlayer(extend PlayerI) reflect.Type { //验证modulei
// 	//验证模块名称
// 	playerName := extend.OnGetName()
// 	logs.Info("验证[" + playerName + "]模块")
// 	value := reflect.ValueOf(extend)
// 	extendType := value.Type()
// 	if value.Kind().String() != "ptr" { //验证接口是否为指针接口
// 		panic("player的方法应该是 func(xx *XX)xxx(){},不满足应该实现指针方法")
// 	}
// 	for i := 0; i < value.NumMethod(); i++ { //批量查看方法
// 		method := extendType.Method(i)
// 		name := method.Name
// 		inNum := method.Type.NumIn()
// 		if strings.HasPrefix(name, Func_Net_Perfix) || strings.HasPrefix(name, Func_Loc_PerFix) { //外网函数和内网

// 			if inNum == 2 {

// 			} else if inNum == 3 {
// 				if method.Type.In(1).String() != "string" {
// 					panic(playerName + "模块的" + name + "函数第一个参数必须是 name string")
// 				}
// 			} else {
// 				panic(playerName + "模块的" + name + "函数必须有1-2个参数")
// 			}
// 		}
// 	}
// 	logs.Info("验证[" + playerName + "]模块通过")
// 	return extendType.Elem()
// }

// type PlayerI interface {
// 	//内部使用
// 	getGateInfo() gateInfo
// 	getGatePlayer() gatePlayer
// 	setName(name string) //设置名称
// 	run(extend PlayerI, c *web.Context, upgrader *websocket.Upgrader)
// 	//外部使用
// 	SetId(id string)                                                  //设置Id
// 	Close()                                                           //主动关闭
// 	GetId() string                                                    //获取ID
// 	CreatModule(name string, data interface{}) (ModuleGate, error)    //创建模块
// 	FindModule(name, id string) (ModuleGate, error)                   //查找模块
// 	JoinModule(name, id string, data interface{}) (ModuleHome, error) //加入模块
// 	IsJoinModule(name string) (ModuleHome, bool)                      //模块是否存在
// 	IsJoinModules() []string                                          //自己加入来哪些模块
// 	HasModule(name string) bool                                       //是否存在该模块
// 	HasModules() []string                                             //获取模块有哪些模块
// 	StartUpdate(duration time.Duration)                               //开始定时回调
// 	StopUpdate()                                                      //停止定时回调
// 	//外部覆盖使用
// 	OnInit(c *web.Context) bool                       //初始化
// 	OnGetName() string                                //获取模块名称
// 	OnDisconnect()                                    //断网回调
// 	OnUpdate()                                        //更新
// 	OnModuleJoin(m ModuleHome, data interface{}) bool //有模块加入
// 	OnModuleQuit(name string)                         //有模块退出
// 	OnModuleDisconnect(name string)                   //模块掉线了
// }
